﻿using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;
using Maestro_Proveedores.Forms;

namespace Maestro_Proveedores
{
    /// <remarks>
    /// La clase Migración es la encargada de realizar el traslado de la información básica de los proveedores desde INFOR XA hasta el Maestro de proveedores. También es la responsable de actualizar la información de los proveedores cada vez que este sea consultado en el maestro.
    /// Además de la información básica de los proveedores, esta clase tiene la responsabilidad de administrar las cuentas bancarias de los proveedores, controlando las actualizaciones de las mismas.
    /// </remarks>
    public class Migracion
    {
        /// <summary>
        /// Objeto que hace posible la recuperación de información desde INFOR XA.
        /// </summary>
        private static MAPICS.MAPICSDataSet mAPICSdATAsET = new MAPICS.MAPICSDataSet();
        /// <summary>
        /// DataTable que hace referencia a la información del proveedor en el maestro de proveedores.
        /// </summary>
        private static _Maestro_Proveedores_CORPORATIVADataSet.PRV_PROVEEDORDataTable pRV_PROVEEDORDataTable = new _Maestro_Proveedores_CORPORATIVADataSet.PRV_PROVEEDORDataTable();
        /// <summary>
        /// TableAdapter que permite realizar las consultas en el DataTable proveedor en INFOR XA.
        /// </summary>
        private static MAPICS.MAPICSDataSetTableAdapters.PROVEEDORESTableAdapter pROVEEDOREStABLEaDAPTER = new MAPICS.MAPICSDataSetTableAdapters.PROVEEDORESTableAdapter();
        /// <summary>
        /// Este TableAdapter será utilizado para realizar operaciones de inserciones y/o recuperación de información en la tabla PRV_PROVEEDOR.
        /// </summary>
        private static _Maestro_Proveedores_CORPORATIVADataSetTableAdapters.PRV_PROVEEDORTableAdapter pRV_PROVEEDORTableAdapter = new _Maestro_Proveedores_CORPORATIVADataSetTableAdapters.PRV_PROVEEDORTableAdapter();
        /// <summary>
        /// Este TableAdapter será utilizado para realizar operaciones de inserciones y/o recuperación de información en la tabla PRV_BANCO.
        /// </summary>
        private static _Maestro_Proveedores_CORPORATIVADataSetTableAdapters.PRV_bancoTableAdapter pRV_bancoTableAdapter = new _Maestro_Proveedores_CORPORATIVADataSetTableAdapters.PRV_bancoTableAdapter();
        /// <summary>
        /// Este TableAdapter será utilizado para realizar operaciones de inserciones y/o recuperación de información en la tabla PRV_CUENTA_BANCARIA.
        /// </summary>
        private static _Maestro_Proveedores_CORPORATIVADataSetTableAdapters.PRV_cuenta_bancariaTableAdapter pRV_cuenta_bancariaTableAdapter = new _Maestro_Proveedores_CORPORATIVADataSetTableAdapters.PRV_cuenta_bancariaTableAdapter();
        /// <summary>
        /// Es utilizada para guardar el índice de la fila que el Usuario selecciona del formulario emergente “SeleccionarProveedorINFOR”. 
        /// Una vez utilizada, el valor de esta variable es restaurado (-1) para que pueda ser utilizada más adelante.
        /// </summary>
        public static int filaTemp = -1;
        /// <summary>
        /// <para>
        ///Tiene la responsabilidad de importar un proveedor desde INFOR.
        /// </para>
        /// <para>
        ///Este método solo se ejecuta una única vez por cada proveedor, desde la segunda vez en adelante se ejecutara el método actualizaDatosProveedor().
        /// </para>        
        /// </summary>
        /// <param name="buscar">Este parámetro hace referencia al NIT o al ID que tiene el proveedor en INFOR XA</param>
        /// <returns>Retorna True en cuando la migración se realiza completamente.</returns>
        public static bool migrarDesdeInforXa(string buscar)
        {
            try
            {
                int filas = 0;
                
                //-- el valor a buscar tiene mas de 4 caracteres, lo busco por el ID, para evitar un error de conexion.
                if (buscar.Length <= 4) 
                { 
                    filas=Migracion.pROVEEDOREStABLEaDAPTER.FillByID(Migracion.mAPICSdATAsET.PROVEEDORES, buscar);
                }

                //-- si no lo encuentro por el ID, lo busco por el NIT
                if (filas == 0)
                {
                    filas = Migracion.pROVEEDOREStABLEaDAPTER.FillByNIT(Migracion.mAPICSdATAsET.PROVEEDORES, buscar);
                }

                //-- Si no lo encontro hasta aqui, entonces el proveedor no esta registrado en el sistema
                if (filas == 0)
                {
                    MessageBox.Show("Este proveedor no esta Activo en el sistema.\nDebe registrarlo antes en INFOR.");
                    return false;
                }

                String idBanco = "";

                if (MessageBox.Show("Este proveedor esta registrado en INFOR.\n¿Desea migrar la información?", "", MessageBoxButtons.YesNo).Equals(DialogResult.No))
                {
                    return false;
                }
                //--- inicia la migracion  

                MAPICS.MAPICSDataSet.PROVEEDORESRow proveedorRow = Migracion.mAPICSdATAsET.PROVEEDORES[0];

                //--- VERIFICO SI EXISTE MAS DE UN PROVEEDOR CON ESTE NIT, EN ESTE CASO MUESTRO UN ASISTENTE PARA SELECCIONAR EL REGISTRO APROPIADO

                if (Migracion.mAPICSdATAsET.PROVEEDORES.Rows.Count > 1)
                {
                    (new SeleccionarProveedorINFOR()).fillByNit(Migracion.mAPICSdATAsET.PROVEEDORES[0].NIT);
                    if (Migracion.filaTemp == -1)
                    {
                        return false;
                    }
                    proveedorRow = Migracion.mAPICSdATAsET.PROVEEDORES[Migracion.filaTemp];
                }

                //--- obtengo y verifico toda la informacion del proveedor en INFOR XA

                string exepcion = string.Empty;
                string exepcion_bancaria = string.Empty;
                bool is_nacional = true;
                bool omitir_info_bancaria = false;

                if (proveedorRow.IsNITNull())
                {
                    exepcion = "NIT";
                }
                else
                {
                    if (proveedorRow.NIT.Substring(0, 4).Equals("5555"))
                    {
                        is_nacional = false;
                    }

                    if (proveedorRow.IsREPRESENTANTE_LEGALNull())
                    {
                        exepcion = "REPRESENTANTE LEGAL";
                    }
                    else if (proveedorRow.IsFECHA_CREACIONNull())
                    {
                        exepcion = "FECHA DE CREACIÓN";
                    }

                    if (is_nacional)
                    {
                        if (proveedorRow.IsNOMBRE_BANCONull())
                        {
                            exepcion_bancaria = "NOMBRE DEL BANCO";
                        }
                        else if (proveedorRow.IsNUMERO_CUENTANull())
                        {
                            exepcion_bancaria = "NUMERO DE CUENTA";
                        }
                        else if (proveedorRow.IsTIPO_CUENTANull())
                        {
                            exepcion_bancaria = "TIPO DE CUENTA";
                        }
                        else if (proveedorRow.IsCOD_BANCONull())
                        {
                            exepcion_bancaria = "CODIGO DEL BANCO";
                        }
                    }
                }
                if (!exepcion.Equals(string.Empty))
                {
                    MessageBox.Show("Los datos del proveedor NO estan bien diligenciados en INFOR XA. \nCorrija el registro desde INFOR XA y vuelva a intentarlo.\n\nCampo: " + exepcion);
                    return false;
                }

                if (!exepcion_bancaria.Equals(string.Empty))
                {

                    if (MessageBox.Show("Este proveedor presenta inconsistencias en la información bancaria.\n¿Desea omitir dicha información?", "", MessageBoxButtons.YesNo).Equals(DialogResult.No))
                    {
                        return false;
                    }
                    omitir_info_bancaria = true;
                }

                if (!is_nacional)
                {
                    MessageBox.Show("Este proveedor es EXTRANJERO, debe definir manualmente la informacion bancaria.");
                }

                //--- Declaracion e inicializacion de las variables

                string id = proveedorRow.ID.ToString().Trim();
                string nit = proveedorRow.NIT.ToString().Trim();
                string razon_social = proveedorRow.RAZON_SOCIAL.ToString().Trim();
                string representante_legal = proveedorRow.REPRESENTANTE_LEGAL.ToString().Trim();
                string direccion = proveedorRow.DIRECCION.ToString().Trim();

                string ciudad = proveedorRow.CIUDAD.ToString().Trim();
                string pais = proveedorRow.PAIS.ToString().Trim();
                string telefono1 = proveedorRow.TELEFONO1.ToString().Trim();

                string telefono2 = string.Empty;
                string telefono3 = string.Empty;
                string email = string.Empty;
                string pagina_web = string.Empty;
                string cod_activ_econ = string.Empty;
                string digito_verificacion = string.Empty;
                string solicitante = string.Empty;
                string numero_cuenta = string.Empty;
                string codigo_banco = string.Empty;
                string nombre_banco = string.Empty;
                string tipo_cuenta = string.Empty;
                string id_banco = string.Empty;
                DateTime fecha_creacion = DateTime.Now.Date;
                DateTime fecha_vencimiento = DateTime.Now.Date;


                if (!proveedorRow.IsTELEFONO2Null())
                    telefono2 = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.TELEFONO2.ToString().Trim());
                if (!proveedorRow.IsTELEFONO3Null())
                    telefono3 = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.TELEFONO3.ToString().Trim());
                if (!proveedorRow.IsEMAILNull())
                    email = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.EMAIL.ToString().Trim().ToLower());
                if (!proveedorRow.IsPAGINA_WEBNull())
                    pagina_web = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.PAGINA_WEB.ToString().Trim().ToLower());
                if (!proveedorRow.IsCOD_ACTIV_ECONNull())
                    cod_activ_econ = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.COD_ACTIV_ECON.ToString().Trim());
                if (!proveedorRow.IsDIGITO_VERIFICACIONNull())
                    digito_verificacion = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.DIGITO_VERIFICACION.ToString().Trim());
                if (!proveedorRow.IsSOLICITANTENull())
                    solicitante = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.SOLICITANTE.ToString().Trim());
                if (!proveedorRow.IsNUMERO_CUENTANull())
                    numero_cuenta = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.NUMERO_CUENTA.ToString().Trim());
                if (!proveedorRow.IsCOD_BANCONull())
                    codigo_banco = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.COD_BANCO.ToString().Trim());
                if (!proveedorRow.IsNOMBRE_BANCONull())
                    nombre_banco = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.NOMBRE_BANCO.ToString().Trim());
                if (!proveedorRow.IsTIPO_CUENTANull())
                {
                    if (proveedorRow.TIPO_CUENTA.ToString().Trim().ToLower().Contains("co"))
                        tipo_cuenta = "Corriente";
                    else
                        tipo_cuenta = "Ahorro";
                }


                //---en esta parte le agrego al proveedor la fecha de creacion y le calculo la fecha de vencimiento...
                if ((DateTime.Now - MAESTROS.ClassVarios.FechaMAPIC(proveedorRow.FECHA_CREACION.ToString().Trim())).TotalDays > 365)//-- si fue creado hace mas de un año su fecha de vencimiento sera dentro de 6 meses a partir de la fecha actual.
                {
                    fecha_creacion = MAESTROS.ClassVarios.FechaMAPIC(proveedorRow.FECHA_CREACION.ToString().Trim()).Date;
                    fecha_vencimiento = DateTime.Now.AddDays(180).Date;
                }
                //--- si fue creado hace menos de un año, su fecha de vencimiento sera dentro de un año apartir de la fecha de creación.
                else
                {
                    fecha_creacion = MAESTROS.ClassVarios.FechaMAPIC(proveedorRow.FECHA_CREACION.ToString().Trim()).Date;
                    fecha_vencimiento = MAESTROS.ClassVarios.FechaMAPIC(proveedorRow.FECHA_CREACION.ToString().Trim()).AddDays(365).Date;
                }

                //-- registro el proveedor

                int ok =
                Migracion.pRV_PROVEEDORTableAdapter.Insert_MigracionDesdeINFOR
                    (
                        id,
                        nit,
                        razon_social,
                        representante_legal,
                        direccion,
                        ciudad,
                        telefono1,
                        telefono2,
                        telefono3,
                        email,
                        pagina_web,
                        cod_activ_econ,
                        solicitante,
                        digito_verificacion,
                        is_nacional,
                        fecha_creacion,
                        fecha_vencimiento,
                        pais
                    );
                //-- si no lo registro, entonces aborto la migración
                if (!ok.Equals(1))
                {
                    MessageBox.Show("En estos momentos no fue posible realizar la migracion.\n\nIntentelo mas tarde.");
                    return false;
                }

                //-- si es un proveedor es EXTRANJERO no le asocio informacion bancaria 
                if (!is_nacional)
                {
                    //-- me salgo y listo...
                    return true;
                }

                //-- si es usuario decidio omitir el registro de la informacion bancaria, tonces no se la registro 
                if (omitir_info_bancaria)
                {
                    //-- me salgo y listo...
                    return true;
                }

                //---- obtengo el id del banco
                id_banco = Migracion.pRV_bancoTableAdapter.Scalar_UNIQUE_id(codigo_banco, nombre_banco).ToString();

                //--- si el banco no existe, procedo a agregarlo
                if (id_banco.Equals(string.Empty))
                {
                    SqlTransaction transaction = null;
                    String conString = Maestro_Proveedores.Properties.Settings.Default.PRV_ConnectionString;

                    using (SqlConnection connection = new SqlConnection(conString))
                    {
                        string queryInsertBanco = "";
                        queryInsertBanco += " INSERT INTO PRV_banco";
                        queryInsertBanco += "	(codigo,nombre)";
                        queryInsertBanco += " VALUES";
                        queryInsertBanco += "	('{codigo}','{nombre}'); SELECT  Scope_Identity();";
                        queryInsertBanco = queryInsertBanco.Replace("{codigo}", codigo_banco);
                        queryInsertBanco = queryInsertBanco.Replace("{nombre}", nombre_banco);

                        connection.Open();
                        SqlCommand command = connection.CreateCommand();
                        transaction = connection.BeginTransaction("Transaccion");
                        command.Connection = connection;
                        command.Transaction = transaction;
                        command.CommandText = queryInsertBanco;
                        id_banco = command.ExecuteScalar().ToString();
                        transaction.Commit();
                    }
                }
                //MessageBox.Show(id_banco+" - "+tipo_cuenta+" - "+numero_cuenta);

                //---- agrego la cuenta bancaria                        
                Migracion.pRV_cuenta_bancariaTableAdapter.Insert_cuentaActiva
                    (
                        id,
                        short.Parse(id_banco),
                        tipo_cuenta,
                        numero_cuenta
                    );
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
                return false;
            }
            return true;
        }
        /// <summary>
        /// Tiene la responsabilidad de actualizar la información de un proveedor desde INFOR. 
        /// Este método se ejecuta cada vez que se consulte la información de un proveedor en el maestro de proveedores.
        /// </summary>
        /// <param name="id">Hace referencia al ID que tiene el proveedor en INFOR XA</param>
        /// <returns>Retorna True en cuando la actualización se realiza completamente.</returns>
        public static bool actualizaDatosProveedor(string id)
        {
            try
            {
                
                //--- en el siguiente bloque busco el ID del proveedor en PRV_PROVEEDOR y con ese ID busco la informacion
                //--- del proveedor en INFOR XA ya que el NIT no es una PRIMARY KEY ni tampoco un UNIQUE y por ende me puede retornar el registro equivocado.
                try
                {
                    //--- si no encuentra el registro del proveedor en INFOR quiere decir que el proveedor fue deactivado, en este caso no hago nada.
                    if (Migracion.pRV_PROVEEDORTableAdapter.FillById(Migracion.pRV_PROVEEDORDataTable, id).Equals(0))
                        return false;
                }
                catch (Exception)
                {
                }                
                //-- este bloque try-catch evita que se presente una excepcion cuando existan 2 proveedores con el mismo id en INFOR
                try
                {
                    Migracion.pROVEEDOREStABLEaDAPTER.FillByID(Migracion.mAPICSdATAsET.PROVEEDORES, id);
                }
                catch (Exception)
                {
                }
                //--- si no se encontro el registro, significa que el proveedor fue desactivado, en este caso lo desactivo del maestro de proveedores
                if (Migracion.mAPICSdATAsET.PROVEEDORES.Rows.Count.Equals(0))
                {
                    Migracion.pRV_PROVEEDORTableAdapter.Update_activo(false, id);
                    return true;
                }

//MessageBox.Show("...");

                //--- obtengo toda la informacion del proveedor en INFOR XA                
                MAPICS.MAPICSDataSet.PROVEEDORESRow proveedorRow = Migracion.mAPICSdATAsET.PROVEEDORES[0];
                string exepcion = string.Empty;
                string exepcion_bancaria = string.Empty;

//MessageBox.Show("id: " + proveedorRow.ID + " - NIT: " + proveedorRow.NIT);
                if (proveedorRow.IsNITNull())
                {
                    exepcion = "NIT";
                }
                else if (proveedorRow.IsREPRESENTANTE_LEGALNull())
                {
                    exepcion = "REPRESENTANTE LEGAL";
                }

                exepcion = "";
                if (Migracion.pRV_PROVEEDORDataTable[0].is_nacional)
                {
                    if (proveedorRow.IsNOMBRE_BANCONull())
                    {
                        exepcion_bancaria = "NOMBRE DEL BANCO";
                    }
                    else if (proveedorRow.IsNUMERO_CUENTANull())
                    {
                        exepcion_bancaria = "NUMERO DE CUENTA";
                    }
                    else if (proveedorRow.IsTIPO_CUENTANull())
                    {
                        exepcion_bancaria = "TIPO DE CUENTA";
                    }
                    else if (proveedorRow.IsCOD_BANCONull())
                    {
                        exepcion_bancaria = "CODIGO DEL BANCO";
                    }
                }

                if (!exepcion.Equals(string.Empty))
                {
                    return false;
                }

                //--- Declaracion e inicializacion de las variables
                //MessageBox.Show(MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.RAZON_SOCIAL.ToString().Trim()));
                string razon_social = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.RAZON_SOCIAL.ToString().Trim());
                string representante_legal = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.REPRESENTANTE_LEGAL.ToString().Trim());
                string direccion = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.DIRECCION.ToString().Trim());
                string ciudad = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.CIUDAD.ToString().Trim());
                string pais = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.PAIS.ToString().Trim());
                string telefono1 = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.TELEFONO1.ToString().Trim());
                string telefono2 = string.Empty;
                string telefono3 = string.Empty;
                string email = string.Empty;
                string pagina_web = string.Empty;
                string cod_activ_econ = string.Empty;
                string digito_verificacion = string.Empty;
                string solicitante = string.Empty;
                string numero_cuenta = string.Empty;
                string codigo_banco = string.Empty;
                string nombre_banco = string.Empty;
                string tipo_cuenta = string.Empty;
                string id_banco = string.Empty;

                if (!proveedorRow.IsTELEFONO2Null())
                    telefono2 = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.TELEFONO2.ToString().Trim());
                if (!proveedorRow.IsTELEFONO3Null())
                    telefono3 = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.TELEFONO3.ToString().Trim());
                if (!proveedorRow.IsEMAILNull())
                    email = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.EMAIL.ToString().Trim().ToLower());
                if (!proveedorRow.IsPAGINA_WEBNull())
                    pagina_web = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.PAGINA_WEB.ToString().Trim().ToLower());
                if (!proveedorRow.IsCOD_ACTIV_ECONNull())
                    cod_activ_econ = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.COD_ACTIV_ECON.ToString().Trim());
                if (!proveedorRow.IsDIGITO_VERIFICACIONNull())
                    digito_verificacion = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.DIGITO_VERIFICACION.ToString().Trim());
                if (!proveedorRow.IsSOLICITANTENull())
                    solicitante = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.SOLICITANTE.ToString().Trim());
                if (!proveedorRow.IsNUMERO_CUENTANull())
                    numero_cuenta = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.NUMERO_CUENTA.ToString().Trim());
                if (!proveedorRow.IsCOD_BANCONull())
                    codigo_banco = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.COD_BANCO.ToString().Trim());
                if (!proveedorRow.IsNOMBRE_BANCONull())
                    nombre_banco = MAESTROS.ClassVarios.LimpiarCadena(proveedorRow.NOMBRE_BANCO.ToString().Trim());
                if (!proveedorRow.IsTIPO_CUENTANull())
                {
                    if (proveedorRow.TIPO_CUENTA.ToString().Trim().ToLower().Contains("co"))
                        tipo_cuenta = "Corriente";
                    else
                        tipo_cuenta = "Ahorro";
                }

//MessageBox.Show(id_banco + " - " + tipo_cuenta + " - " + numero_cuenta);

                //---actualizo el proveedor
                int ok = Migracion.pRV_PROVEEDORTableAdapter.Update_desdeINFOR
                    (
                        razon_social,
                        representante_legal,
                        direccion,
                        ciudad,
                        telefono1,
                        telefono2,
                        telefono3,
                        email,
                        pagina_web,
                        cod_activ_econ,
                        solicitante,
                        digito_verificacion,
                        pais,
                        id
                    );


                if (ok.Equals(0))
                {
                    MessageBox.Show("En estos momentos no fue posible actualizar la informacion del proveedor.");
                    return false;
                }

                //-- si es un proveedor es EXTRANJERO no le asocio informacion bancaria 
                if (!Migracion.pRV_PROVEEDORDataTable[0].is_nacional)
                {
                    //-- me salgo y listo...
//MessageBox.Show(" extranjero ");
                    return true;                    
                }

//MessageBox.Show(id_banco + " - " + tipo_cuenta + " - " + numero_cuenta);

                //--- si aun siendo nacional, no presenta o tiene conflictos en la informacion bancaria, entonces la actualizacion termina en este punto.
                if (!exepcion_bancaria.Equals(string.Empty))
                {
                    return false;
                }

                //---- obtengo el id del banco
                id_banco = Migracion.pRV_bancoTableAdapter.Scalar_UNIQUE_id(codigo_banco, nombre_banco).ToString();

//MessageBox.Show(id_banco + " - " + tipo_cuenta + " - " + numero_cuenta);

                //--- si el banco no existe, procedo a agregarlo y recupero el id
                if (id_banco.Equals(string.Empty))
                {
                    try
                    {
                        SqlTransaction transaction = null;
                        String conString = Maestro_Proveedores.Properties.Settings.Default.PRV_ConnectionString;

                        using (SqlConnection connection = new SqlConnection(conString))
                        {
                            string queryInsertBanco = "";
                            queryInsertBanco += " INSERT INTO PRV_banco";
                            queryInsertBanco += "	(codigo,nombre)";
                            queryInsertBanco += " VALUES";
                            queryInsertBanco += "	('{codigo}','{nombre}'); SELECT  Scope_Identity();";
                            queryInsertBanco = queryInsertBanco.Replace("{codigo}", codigo_banco);
                            queryInsertBanco = queryInsertBanco.Replace("{nombre}", nombre_banco);

                            connection.Open();
                            SqlCommand command = connection.CreateCommand();
                            transaction = connection.BeginTransaction("Transaccion");
                            command.Connection = connection;
                            command.Transaction = transaction;
                            command.CommandText = queryInsertBanco;
                            id_banco = command.ExecuteScalar().ToString();
                            transaction.Commit();
                        }
                    }
                    catch (Exception ex) 
                    {
                        herramientas.MessageException.show(ex);
                    }
                }

//MessageBox.Show(id_banco + " - " + tipo_cuenta + " - " + numero_cuenta);

                //---agrego la NUEVA cuenta bancaria, suponiendo que no la encontro registrada. El disparador de la BD se encargara de desactivar las cuentas anteriores y activar la nueva
                if (Migracion.pRV_cuenta_bancariaTableAdapter.Scalar_COUNT_cuentasActivas(id, short.Parse(id_banco), tipo_cuenta, numero_cuenta).Equals(0))
                {
                    Migracion.pRV_cuenta_bancariaTableAdapter.Insert_cuentaActiva(id, short.Parse(id_banco), tipo_cuenta, numero_cuenta);
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
                return false;
            }
            return true;
        }
    }
}
